package demo.test;

import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
import java.util.List;

/**
 * @Auther: hjy(lc))
 * @Date: 2022/7/19-07-19-11:33
 * @Description：demo.test    引用类型
 */
public class String_use {
    public static void main(String[] args) {
        //字符串：引用类型
        //左边是类（模板）： 右边是对象（具体）
        String s = "aabcbcbcaccbcaabc";
        String s1 = ".*a*aa*.*b.*c*.*a*";
        //System.out.println(isMatch(s, s1));

    }

    public static boolean isMatch(String s, String p) {
        if(p.equals(".*")){
            return true;
        }

        int index = s.length()-1;
        int i = s.length()-1;
        int j = p.length()-1;
        for(;j>=0;j--){
            if(i< 0){
                if(j==0 && (p.charAt(j+1) == '*'|| (p.length() >= 3 && p.substring(1,3).equals(".*")&&p.charAt(0)=='.'))){
                    return true;
                }else if(p.charAt(j) != '*'){
                    return false;
                }else if(p.charAt(j) == '*'){
                    while(j >= 0 && p.charAt(j) == '*'){
                        j=j-2;
                    }
                    if(j < 0){
                        return true;
                    }else if(j > 0){
                        return false;
                    }else if(p.charAt(j) == s.charAt(0)){
                        if(index == 0){
                            return false;
                        }
                        return true;
                    }
                }else {
                    return false;
                }
            }
            if(p.charAt(j)== s.charAt(i) || p.charAt(j) == '.'){
                index = i;
                i--;
                continue;
            }else if(p.charAt(j)=='*'){
                if(p.charAt(j-1) == '.' ){
                    if(j-1==0){
                        return true;
                    }else{
                        while(i>= 0 && p.charAt(j-2) != s.charAt(i)){
                            i--;
                        }
                    }
                }
                while(i >= 0 && s.charAt(i) ==p.charAt(j-1) ){
                    i--;
                }
                j = j-1;
            }else{
                return false;
            }
        }
        if(i >= 0){
            return false;
        }
        return true;
//        int i=0,j=0;
//        while(i < s.length() && j < p.length()){
//            if(p.charAt(j) == '.' ||p.charAt(j) == s.charAt(i)){
//                i++;
//                j++;
//                continue;
//            }else if(p.charAt(j) == '*'){
//                // if(p.charAt(j-1) == '.'){
//                j++;
//                i = s.length()-(p.length()-j);
//                // }
//                // while(i < s.length() &&s.charAt(i) == s.charAt(i-1)){
//                //     i++;
//                // }
//                // j++;
//            }else if(j+1 < p.length() && p.charAt(j+1) == '*'){
//                while(i< s.length() && p.charAt(j) == s.charAt(i)){
//                    i++;
//                }
//                j = j+2;
//            }else if(s.charAt(i) != p.charAt(j)){
//                return false;
//            }
//        }
//        if(i < s.length() || j < p.length()){
//            return false;
//        }else{
//            return true;
//        }
    }
}
